package com.xinrui.sunnyday.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.xinrui.sunnyday.constant.MessageConstant;
import com.xinrui.sunnyday.constant.RedisMessageConstant;
import com.xinrui.sunnyday.entity.Result;
import com.xinrui.sunnyday.utils.SMSUtils;
import com.xinrui.sunnyday.utils.ValidateCodeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;

@Controller
@ResponseBody
@RequestMapping("/validateCode")
public class ValidateCodeController {
    @Autowired
    private JedisPool jedisPool;

    /**
     * 手机短信验证码发送:预约信息
     *
     * @param telephone
     */
    @PostMapping("/send4Order")
    public Result send4Order(String telephone) {
        //            创建jedis对象
        Jedis resource = jedisPool.getResource();
//        生成验证码的code(键)
        String key = RedisMessageConstant.SENDTYPE_ORDER + "_" + telephone;
//        拿到验证码的corder的值
        String codeInRedis = resource.get(key);
        if (null==codeInRedis) {
            //        没有直接操作
//        将电话号码存放到redis中作为key,将随机生成验证码的工具类调用生成随机验证码作为value，并将此验证码设置时间为五分钟
//            拿到value，随机生成的验证码,默认一个验证码
            String code = String.valueOf(ValidateCodeUtils.generateValidateCode(6));
//            腾讯云需要String[]来替代短信模板的参数
            String[] params = {code + ""};
            try {
//            调用工具类发送验证码
                SMSUtils.sendSingleMessageForCode(telephone, params);
//        将数据添加到redis中
                resource.setex(key, 300, code);
                return new Result(true, MessageConstant.SEND_VALIDATECODE_SUCCESS);
            } catch (Exception e) {
//                发送失败
                return new Result(false, MessageConstant.SEND_VALIDATECODE_FAIL);
            }
        }
//        存在直接返回验证码已发送请注意查收
        return new Result(true, "验证码已发送请注意查收!");
    }
    @PostMapping("/send4Login")
    public Result send4Login(String telephone){
        //            创建jedis对象
        Jedis resource = jedisPool.getResource();
//        生成验证码的code(键)
        String key = RedisMessageConstant.SENDTYPE_LOGIN + "_" + telephone;
//        拿到验证码的corder的值
        String codeInRedis = resource.get(key);
        if (null==codeInRedis) {
            //        没有直接操作
//        将电话号码存放到redis中作为key,将随机生成验证码的工具类调用生成随机验证码作为value，并将此验证码设置时间为五分钟
//            拿到value，随机生成的验证码,默认一个验证码
            String code = String.valueOf(ValidateCodeUtils.generateValidateCode(6));
//            腾讯云需要String[]来替代短信模板的参数
            String[] params = {code + ""};
            try {
//            调用工具类发送验证码
                SMSUtils.sendSingleMessageForCode(telephone, params);
//        将数据添加到redis中
                resource.setex(key, 300, code);
                return new Result(true, MessageConstant.SEND_VALIDATECODE_SUCCESS);
            } catch (Exception e) {
//                发送失败
                return new Result(false, MessageConstant.SEND_VALIDATECODE_FAIL);
            }
        }
//        存在直接返回验证码已发送请注意查收
        return new Result(true, "验证码已发送请注意查收!");
    }

}
